// 该文件用于创建 Vuex 中最为核心的 store
import Vue from 'vue'
// 引入 Vuex
import Vuex from 'vuex'

Vue.use(Vuex);

// 准备 actions -- 用于响应组件中的动作
const actions = {
    /*add: function (context, value) {
        console.log('actions 中的 jia 被调用了', context, value);
        context.commit('JIA', value);
    },
    sub: function (context, value) {
        console.log('actions 中的 jian 被调用了', context, value);
        context.commit('JIAN', value);
    },*/
    addOdd(context, value) {
        console.log('actions 中的 addOdd 被调用了', context);
        context.dispatch('demo1', value);
    },
    demo1(context, value) {
        console.log('actions 中的 demo1 被调用了 -- demo1');
        context.dispatch('demo2', value);
    },
    demo2(context, value) {
        console.log('actions 中的 demo2 被调用了 -- demo2');
        if (context.state.sum % 2 !== 0) {
            context.commit('JIA', value);
        }
    },
    addWait(context, value) {
        console.log('actions 中的 addWait 被调用了');
        setTimeout(() => {
            context.commit('JIA', value);
        }, 500);
    }
};
// 准备 mutations -- 用于操作数据（state）
const mutations = {
    JIA: function(state, value) {
        console.log('mutations 中的 JIA 被调用了', state, value);
        state.sum += value;
    },
    JIAN: function (state, value) {
        console.log('mutations 中的 JIAN 被调用了', state, value);
        state.sum -= value;
    }
};
// 准备 state -- 用于存储数据
const state = {
    sum: 0,
    school: '尚硅谷',
    subject: '前端'
};
// 准备 getters -- 用于将 state 中的数据进行加工
const getters = {
    bigSum(state) {
        return state.sum * 10;
    }
};

// 创建并且暴露 store
export default new Vuex.Store({
    actions,
    mutations,
    state,
    getters
})